package wrapclass;
/*
* ==与equals
* Integer类中重写了equals方法,比较的是两个Integer对象中的值
*  byte类型数据范围:-128~127
* 装箱缓存机制:
*   如果装箱的整数不在byte类型数据范围(-127-128)之内,底层会直接创建该包装类的对象Integer i1 = new Integer(300)
*   如果装箱的整数在byte类型数据范围(-127-128)之内,底层会从一个cache数组中取出对应的Integer对象,相同值取出的Integer对象相同
* Integer[] cache = new Integer[256]
*   cache[0]= new Integer(-128);
*   cache[1]= new Integer(-127);
*   cache[2]= new Integer(-126);
*   .....
*   cache[254]=new Integer(126)
*   cache[255]=new Integer(127)
* */
public class WrapClassDemo04 {
    public static void main(String[] args) {
        Integer i1 = 300;//Integer i1 = new Integer(300)
        Integer i2 = 300;//Integer i2 = new Integer(300)
        //==因为Integer是基本数据类型包装类
        //所以==比较的是两个对象的内存地址值
        //两个对象都是new出来的,地址值不同返回false
        System.out.println(i1 == i2);//false
        System.out.println(i1.equals(i2));//true

        Integer i3 = 126;//126从Integer[] cache = new Integer[256]数组中取出相应的Integer对象cache[254]=new Integer(126)
        Integer i4 = 126;//i3,i4取出的是相同的对象,所以内存地址值相同
        System.out.println(i3 == i4);//true
        System.out.println(i3.equals(i4));//true
    }
}
